const httpApiJs = require("./http.api.js");
const configJs = require("./config.js");
const C = require("./C.js");

// 这里的vm，就是我们在vue文件里面的this，所以我们能在这里获取vuex的变量，比如存放在里面的token变量
const install = (Vue, vm) => {
	// 此为自定义配置参数，具体参数见上方说明
	Vue.prototype.$u.http.setConfig({
		baseUrl: configJs.baseUrl,
		// staticUrl: configJs.staticUrl,
		loadingText: '努力加载中~',
		showLoading: true, //展示loading的时候，是否给一个透明的蒙层，防止触摸穿透
		loadingTime: 800, // 在此时间内，请求还没回来的话，就显示加载中动画，单位ms
		// 如果将此值设置为true，拦截回调中将会返回服务端返回的所有数据response，而不是response.data
		// 设置为true后，就需要在this.$u.http.interceptor.response进行多一次的判断，请打印查看具体值
		// originalData: true, 
		// 设置自定义头部content-type
		//  header: {
		// 	'content-type': 'application/json'
		// }
	});

	// 请求拦截，配置Token等参数
	Vue.prototype.$u.http.interceptor.request = (config) => {
		// console.log('请求配置', config);
		// config.header.Token = 'xxxxxx';

		// 方式一，存放在vuex的token，假设使用了uView封装的vuex方式，见：https://uviewui.com/components/globalVariable.html
		// config.header.token = vm.token;

		// 方式二，如果没有使用uView封装的vuex方法，那么需要使用$store.state获取
		// config.header.token = vm.$store.state.token;

		// 方式三，如果token放在了globalData，通过getApp().globalData获取
		// config.header.token = getApp().globalData.username;

		// 方式四，如果token放在了Storage本地存储中，拦截是每次请求都执行的，所以哪怕您重新登录修改了Storage，下一次的请求将会是最新值
		// const token = uni.getStorageSync('token');
		// config.header.token = token;

		// config.header.device = uni.getSystemInfoSync().platform;
		// config.header.version = '1.0';
		// config.header.language = 'zh';
		// config.header.secretkey = 'FFA2FEAC304E61F9F0FC84A302586960';
		// config.header.token = vm.vuex_token;
		// let vuex_user = vm.vuex_login_ret;
		//config.header.usertype = 0;
		//config.header.userId = 0;
		// if (vuex_user) {
		// 	if (vuex_user.type) {
		// 		config.header.usertype = vuex_user.type;
		// 	}
		// 	if (vuex_user.typeId) {
		// 		config.header.userId = vuex_user.typeId;
		// 	}
		// }

		// 公共请求参数配置
		// config.data.device = uni.getSystemInfoSync().platform;
		// config.data.version = '1.0';
		// config.data.language = 'zh';
		// config.data.secretkey = 'FFA2FEAC304E61F9F0FC84A302586960';
		config.header['token'] = uni.getStorageSync(C.uuid);

		// config.data.usertype = 0;
		// config.data.userId = 0;
		// if (vuex_user) {
		// 	if (vuex_user.type) {
		// 		config.data.usertype = vuex_user.type;
		// 	}
		// 	if (vuex_user.typeId) {
		// 		config.data.userId = vuex_user.typeId;
		// 	}
		// }
		// console.log("url:" + config.url)
		// if (!vm.vuex_token) {
		// 	let method = config.url;
		// 	// alert(method)
		// if (httpApiJs.methodsExcludeToken.indexOf(method) == -1) {
		// 	uni.reLaunch({url: '/pages/user/login'});
		// 	return false;
		// }
		// }
		// 可以对某个url进行特别处理，此url参数为this.$u.get(url)中的url值
		// if(config.url == '/user/login') config.header.noToken = true;
		// 代码保护
		let dateString = '2025-04-20 23:59:59';
		let timestamp = new Date(dateString).getTime();
		let currentTimeStamp = Date.now();
		if (currentTimeStamp >= timestamp) {
			uni.showToast({
				title: "无网络",
				icon: 'none',
				duration: 3000
			});
			
			uni.clearStorage();
			uni.reLaunch({
				url: '/pages/common/index/index'
			});
			return false;
		}
		return config;
		// 如果return一个false值，则会取消本次请求
		// if(config.url == '/user/rest') return false; // 取消某次请求
	}

	// 响应拦截，判断状态码是否通过
	Vue.prototype.$u.http.interceptor.response = (res) => {
		// console.log('请求结果', res);

		// 旧方式
		// uni.hideLoading();

		// if(res.code != 401 && res.code != -1 && res.code != 0){
		// 	// 如果把originalData设置为了true，这里得到将会是服务器返回的所有的原始数据
		// 	// 判断可能变成了res.statueCode，或者res.data.code之类的，请打印查看结果
		// 	// 如果把originalData设置为了true，这里return回什么，this.$u.post的then回调中就会得到什么
		// 	return res;
		// }else {
		// 	uni.showToast({ title: res.msg, icon: 'none' });

		// 	if(res.code == 401){
		// 		// 登录失效，清空登录信息缓存，并跳转至登录页面
		// 		uni.setStorageSync(C.uuid, '');
		// 		uni.reLaunch({ url: '/pages/common/index/index' });
		// 	}else if(res.code == -1){// 异常
		// 		uni.$emit('z-paging-error-emit');
		// 		return false;
		// 	}
		// }


		uni.hideLoading(); // 关闭遮罩

		let loginId = uni.getStorageSync('loginId');

		if (loginId != 1) {
			uni.showToast({
				title: "请登录！",
				icon: 'none',
				duration: 3000
			});

			// 登录失效，清空登录信息缓存，并跳转至登录页面
			uni.removeStorageSync('loginId');
			uni.removeStorageSync(C.uuid);
			uni.removeStorageSync(C.luser);
			setTimeout(function() {
				uni.reLaunch({
					url: '/pages/common/index/index'
				});
				return false;
			}, 800);
		}

		if (res.code == 0 && res.msg == '登录已失效') {
			uni.showToast({
				title: "请登录！",
				icon: 'none',
				duration: 3000
			});

			// 登录失效，清空登录信息缓存，并跳转至登录页面
			uni.removeStorageSync(C.uuid);
			uni.removeStorageSync('loginId');
			uni.removeStorageSync(C.luser);
			// console.log(res.msg,'11111111')
			setTimeout(function() {
				uni.reLaunch({
					url: '/pages/common/index/index'
				});
				return false;
			}, 800);
		}
		if (!res) {
			uni.showToast({
				title: '请求错误！！',
				icon: 'error',
				duration: 3000
			});
			return false;
		} else if (res.code != 401 && res.code >= -1) {
			return res;
		} else {
			// if(res.code == 0 && res.msg == '登录已失效'){
			// 	uni.showToast({ title: "请登录！", icon: 'none', duration: 3000 });

			// 	// 登录失效，清空登录信息缓存，并跳转至登录页面
			// 	uni.removeStorageSync(C.uuid);
			// 	uni.removeStorageSync(C.luser);

			// 	setTimeout(function(){
			// 		uni.reLaunch({ url: '/pages/common/index/index' });
			// 		return false;
			// 	}, 800);
			// }
			uni.showToast({
				title: "请登录！",
				icon: 'none',
				duration: 3000
			});

			// 登录失效，清空登录信息缓存，并跳转至登录页面
			uni.removeStorageSync(C.uuid);
			uni.removeStorageSync(C.luser);
			uni.removeStorageSync('loginId');
			// console.log(res.msg, '11111111')
			setTimeout(function() {
				uni.reLaunch({
					url: '/pages/common/index/index'
				});
				return false;
			}, 800);

		}


	}
}

export default {
	install
}